//////////////////////////////////////////////////////////////////////////

#ifndef _GRAPHICS_H_
#define _GRAPHICS_H_

//////////////////////////////////////////////////////////////////////////

#include <string>

//////////////////////////////////////////////////////////////////////////

class GraphicsImpl;

//////////////////////////////////////////////////////////////////////////


/** Game graphics
*
*  @author   Pasechnik Roman
*  @since    Nov 12th, 2009
*  @updated  Nov 12th, 2009
*/
class Graphics
{
//////////////////////////////////////////////////////////////////////////

public:

//////////////////////////////////////////////////////////////////////////


    /** Constructor */
    Graphics();


    /** Destructor */
    virtual ~Graphics();


//////////////////////////////////////////////////////////////////////////


    /** [Utility type]: Object, that can be drawn on the screen */
    typedef void* Object;


    /** Load object */
    Graphics::Object LoadObject( const std::string& _fileName );


    /** Draw object */
    void DrawObject( Graphics::Object _object, size_t _x, size_t _y, bool _center = false );


    /** Draw string in the left upper corner */
    void DrawString( const char* _str );


    /** Clears screen */
    void ClearScreen();


    /** Update screen */
    void Update();


//////////////////////////////////////////////////////////////////////////

private:

//////////////////////////////////////////////////////////////////////////


    /** Graphics impl */
    GraphicsImpl* m_Impl;


//////////////////////////////////////////////////////////////////////////
};


//////////////////////////////////////////////////////////////////////////

#endif

//////////////////////////////////////////////////////////////////////////
